package com.mcm.vistas;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.PlainDocument;

import com.mcm.dto.Producto;
import com.mcm.modelos.ModeloProducto;
import com.mcm.servicios.ProductoServicio;
import com.mcm.util.MyDoubleFilter;
import com.mcm.util.MyIntFilter;

public class AgregarProducto extends JFrame implements ActionListener
{
	private static final long serialVersionUID = -1870845802432530663L;
	
	private ModeloProducto model = null;
	private Dimension dim;
	
	private JTextField precioText = new JTextField();
	private JTextField descText = new JTextField();
	private JTextField precioVentaText = new JTextField();
	private JTextField cantText = new JTextField();
	
	public AgregarProducto(ModeloProducto model)
	{
		init(model);
	}
	public AgregarProducto(ModeloProducto model, Producto p)
	{
		init(model);
		cargarCampos(p);
	}
	private void init(ModeloProducto model)
	{
		this.model = model;
		personalizarVentana();
		dim = new Dimension(100, 20);
		limpiarCampos();
		createPanel();
	}
	
	private void personalizarVentana()
	{
		setTitle("Agregar producto");
		this.setVisible(true);
//		this.setLocationRelativeTo(null);
		this.setSize(new Dimension(400, 200));
		this.setResizable(false);
	}
	
	private void createPanel()
	{
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
		panel.setBorder(BorderFactory.createLineBorder(Color.black));
		
		JPanel panel1 = crearCampoDescripcion("Descripcion");
		JPanel panel2 = crearCampoPrecio("Precio");
		JPanel panel3 = crearCampoPrecioVenta("Precio Venta");
		JPanel panel4 = crearCampoCantidad("Cantidad");
		
		panel.add(panel1);
		panel.add(panel2);
		panel.add(panel3);
		panel.add(panel4);
		
		JButton button = new JButton("Agregar");
		button.addActionListener(this);
		panel.add(button);
		panel.add(Box.createRigidArea(new Dimension(20,10)));
		
		add(panel);
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if(estaVacio(descText.getText()) || estaVacio(precioText.getText())
				|| estaVacio(precioVentaText.getText()) || estaVacio(cantText.getText()))
		{
			JOptionPane.showMessageDialog(this, "Por favor completar todos los campos", "Advertencia", JOptionPane.WARNING_MESSAGE);
			return;
		}
		Producto p = new Producto();
		
		p.setDescripcion(descText.getText());
		p.setPrecio(Double.valueOf(precioText.getText()));
		p.setPrecioVenta(Double.valueOf(precioVentaText.getText()));
		p.setCantidad(Integer.valueOf(cantText.getText()));
		
		model.addElement(p);
		
		ProductoServicio ps = new ProductoServicio();
		ps.guardarProducto(p);
		
		this.dispose();
	}
	
	private boolean estaVacio(String texto)
	{
		return (texto==null || texto.equals(""));
	}
	
	private void limpiarCampos()
	{
		precioText.setText("");
		descText.setText("");
		precioVentaText.setText("");
		cantText.setText("");
	}
	
	private void cargarCampos(Producto p)
	{
		precioText.setText(String.valueOf(p.getPrecio()));
		descText.setText(p.getDescripcion());
		precioVentaText.setText(String.valueOf(p.getPrecioVenta()));
		cantText.setText(String.valueOf(p.getCantidad()));
	}
	
	private JPanel crearCampoCantidad(String label)
	{
		cantText = new JTextField();
		return crearCampo(cantText, label, 1);
	}
	
	private JPanel crearCampoDescripcion(String label)
	{
		descText = new JTextField();
		return crearCampo(descText, label, 3);
	}
	
	private JPanel crearCampoPrecio(String label)
	{
		precioText = new JTextField();
		return crearCampo(precioText, label, 2);
	}
	
	private JPanel crearCampoPrecioVenta(String label)
	{
		precioVentaText = new JTextField();
		return crearCampo(precioVentaText, label, 2);
	}
	
	private JPanel crearCampo(JTextField tf, String labelSt, int tipo)
	{
		JLabel label = new JLabel(labelSt);
		label.setPreferredSize(new Dimension(100, 20));
		
		tf.setPreferredSize(dim);
		PlainDocument doc = (PlainDocument) tf.getDocument();
		
		switch(tipo){
			case 1: doc.setDocumentFilter(new MyIntFilter());break;
			case 2: doc.setDocumentFilter(new MyDoubleFilter());break;
		}
		JPanel panel = new JPanel();
		panel.add(label);
		panel.add(tf);
		
		return panel;
	}
}
